package test.wordprj.word.uitl;

import test.wordprj.word.bean.MenuNode;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class MenuTreeBuilder {
    /**
     * 将扁平列表转换为树形结构
     * @param nodes 原始数据列表
     * @return 树形结构根节点列表
     */
    public static List<MenuNode> buildTree(List<MenuNode> nodes) {
        // 1. 过滤已勾选节点并建立快速索引
        Map<String, MenuNode> nodeMap = nodes.stream()
                .filter(MenuNode::isChecked)
                .collect(Collectors.toMap(MenuNode::getId, node -> node));

        // 2. 构建树形结构
        List<MenuNode> rootNodes = new ArrayList<>();
        nodeMap.values().forEach(node -> {
            String pid = node.getPid();
            if ("0".equals(pid)) {
                rootNodes.add(node);
            } else {
                MenuNode parent = nodeMap.get(pid);
                if (parent != null) {
                    parent.getChildren().add(node);
                }
            }
        });

        return rootNodes;
    }
}
